perm filename INIT[MUS,LCS]3 blob sn#319859 filedate 1977-12-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002
C00007 00003	<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)
C00009 ENDMK
C⊗;

COMMENT: ******INITIALIZATION FILE FOR MUS10.DMP******** 10/77
***THIS IS STANFORD VERSION.

	 TO CREATE MUS10.DMP RUN COMMAND FILE, 'LMUS.CMD',
	 THEN READ IN THIS FILE BEFORE SAVING ON THE SYSTEM.

	THE FOLLOWING FUNCTIONS ARE SET UP HEREIN:
		SYNTH(ARRAY FUNC)
		POWER( N, X )   [GIVES POWER OF N TO THE XTH] ;

NOMSG←1;  < INHIBITS REPETITIVE MESSAGES
VARIABLE MAG,C,CF,CS,D,DF,DS,E,EF,ES,F,FF,FS,G,GF,GS,A,AF,AS,B,BF,BS;
C←261.62;  CS←DF←277.18;  D←293.66;  DS←EF←311.13;  E←FF←329.63;
F←ES←349.23;  FS←GF←369.99;  G←391.99;  GS←AF←415.31;
A←440;    AS←BF←466.16;  B←493.89; CF←B/2; BS←C*2;

EXTERNAL FUNCTION ZDELAY(Input,Curlen,BufLen,ARRAY Buffer,Inptr),
	SDELAY(DUMMY,Curlen,BufLen,ARRAY Buffer,Inptr),
	SIND(A),COS(A),ZERO(ARRAY A), SIN(A), EXP(A), ALOG(A), SQRT(A),
        SEG(ARRAY X),SYNTH(ARRAY Z),RDNUM(X), DDCLR, SEE(ARRAY Z);

FUNCTION POWER(X,N)=EXP(N*ALOG(X));	comment nth power of x;

<comment: type 'SETMAG; nchns, srate'  ;
FUNCTION MAGERR(X);
	BEGIN  PRINT "IMPROPER INPUT.   ";  X←0;
	  print "Type number of channels and sample rate: ";
	  END;

FUNCTION ADJRATE; BEGIN
  IF SRATE < 6400 THEN BEGIN
    IF SRATE <8 THEN SRATE ← 6400;  IF SRATE <10 THEN SRATE ← 8000;
    IF SRATE <12 THEN SRATE ← 10000;  IF SRATE <16 THEN SRATE ← 12800;  
    IF SRATE <20 THEN SRATE ← 16000;  IF SRATE <25 THEN SRATE ← 20000;
    IF SRATE <32 THEN SRATE ← 25600;  IF SRATE <40 THEN SRATE ← 32000;
    IF SRATE <50 THEN SRATE ← 40000; IF SRATE <60 THEN SRATE ← 51200;
    IF SRATE <80 THEN SRATE ← 64000; IF SRATE <100 THEN SRATE ← 80000;
    IF SRATE <120 THEN SRATE ← 102400; IF SRATE <130 THEN SRATE ← 128000;
    IF SRATE <200 THEN SRATE ← 160000; IF SRATE <220 THEN SRATE ← 204800;
    IF SRATE <260 THEN SRATE ← 256000; IF SRATE <4000 THEN SRATE ← 10000;
  	 COMMENT: YOU MAY TYPE 1 OR 12 FOR 12800, ETC. 10000=10000;
		END;  END;

Function SETMAG;
    begin
	VARIABLE X; X←0;
	WHILE X = 0 DO
		BEGIN   X←1; rdnum(nchns); rdnum(srate);
		IF NCHNS > 4  THEN  MAGERR(X);
		IF NCHNS = 3  THEN  MAGERR(X);
		IF NCHNS < 1  THEN  MAGERR(X);
		ADJRATE; 

		COMMENT: ONLY 6400, 12800, ETC. ARE ACCEPTED;
COMMENT:	IF INT(SRATE/6400+.1) } SRATE/6400 THEN MAGERR(X);
		END;

	MAG←512/srate;
	PRINT "NCHNS=",NCHNS,"  SRATE=",SRATE ;
    end;

<SRATE←12800;MAG←512/SRATE;NCHNS←1;
SETMAG; 1 12800;
<FOUR INSTRUMENTS FOR ELEMENTRY COMPUTER MUSIC (+SIMP)

INSTRUMENT SIMP;
OUTA←OUTA+ZOSCIL(P4,MAG*P3,P5);
END;

INSTRUMENT TOOT;
FOSCIL[P2*SRATE/512](P4,1,P5);
COSCIL(U1,P3*MAG,P6);<P6 IS TONE COLOR FOR 'TOOT'
OUTA←OUTA+U2;END;

INSTRUMENT CLAR;
FOSCIL[P2*SRATE/512](P4,1,P5);
COSCIL(U1,P3*MAG,P7);< P7 IS TONE COLOR FOR 'CLAR'
OUTA←OUTA+U2;END;

INSTRUMENT BRIT;
FOSCIL[P2*SRATE/512](P4,1,P5);
COSCIL(U1,P3*MAG,P8);< P8 IS TONE COLOR FOR 'BRIT'
OUTA←OUTA+U2;END;

INSTRUMENT BUZZ;
FOSCIL[P2*SRATE/512](P4,1,P5);
COSCIL(U1,P3*MAG,P9);< P9 IS TONE COLOR FOR 'BUZZ'
OUTA←OUTA+U2;END;

<NOMSG←0;
ARRAY F1,F2,F3,F4,F5,F6(512);
SYNTH(F1);1 1  999; < TOOT   - SINE WAVE (USED FOR SIMP ALSO)
SEG(F2);.9 6,1 11 .9 82	.7 90  0 100; < MEZZO LEGATO
SEG(F3);1 3,1 10,.4 23,.15 40,0 100; < STACCATO
SYNTH(F4);1,.5  3,.3  5,.2  7,.1  999; < CLAR
SYNTH(F5);1,.3  2,.4  3,.2  8,.2  12 .1  999; < BRIT
SEG(F6);-1,1   1,7   -1,14   -1,100; < BUZZ
<NOMSG←1;

OUTFILE←"TEST.SND";  <SETS UP DEFAULT OUTPUT FILE NAME. (BITS←12;)

PLAY;TOOT 0 .12 C 1000 F2 F1 F4 F5 F6 0;
CLAR .12;BRIT .24;BUZZ .36;
PLAY;SIMP 0 .5 A 1000 F1;FINISH;